// 创建服务
const express = require('express')
const app = express()

// 解决跨域配置cors
const cors = require('cors')
app.use(cors())

// 1、引入路由文件
const userRouter = require('./router/user')     // 用户
const courseRouter = require('./router/course') // 课程
// 解决post请求
// 解析请求体json格式数据
app.use(express.json())
// 解析请求体urlencoded格式数据
app.use(express.urlencoded({ extended: false }))

// 解决校验 引入joi校验中间件
const joi = require('joi')

// 解决token
// 引入jwt中间件，用于解析token
const {expressjwt:jwt} = require('express-jwt')
// 引入jwt秘钥文件
const { jwtSecretKey } = require('./config/jwtSecretKey')
// 设置jwt解析token配置
app.use(
    jwt({
        secret:jwtSecretKey,    // 秘钥
        algorithms: ["HS256"],  // 算法
    }).unless({ path: ['/api/v1/user/login','/api/v1/user/register'] }) // 排除登录注册接口
)


// 错误中间件
app.use(function (err, req, res, next) {
    // 数据校验失败
    if (err instanceof joi.ValidationError) {
        return res.send({
            code: 1,
            msg: err.message
        })
    }
    // token解析失败
    if (err.name === 'UnauthorizedError') {
        return res.send({
            code: 1,
            msg: 'token身份验证失败'
        })
    }
    // 未知错误
    res.send({
        code: 1,
        msg: err.message
    })
    next()
    
})

// 2、使用路由
app.use('/api/v1/user',userRouter)
app.use('/api/v1/course',courseRouter)


app.listen(3001, () => {
    console.log('express server running at http://127.0.0.1:3001')
})